package com.glodon.paas.util.asyn;

/**
 * 异步工作接口
 * @author a
 *
 */
public interface AsynWorker {
	/**
	 * 初始化并启动worker
	 */
	void start();
	
	/**
	 * 停止
	 */
	void shutdown();
	
	/**
	 * 异步执行obj.methodName()<br>
	 * 当paramTypes为null时不允许params中有null值，否则通过methodName获取第一个方法，可能导致允许时异常<br>
	 * 
	 * @param obj 目标对象
	 * @param methodName 目标方法
	 * @param params  参数数组
	 * @param paramTypes 参数类型数组，可以是null，
	 */
	void submit(final Object obj, String methodName, final Object[] params, Class<?>[] paramTypes);
	
	/**
	 * 提交一个task到线程池
	 * @param task
	 */
	void submit(Runnable task);
}
